package com.indexingsystem.system.service;

import java.util.List;

import com.indexingsystem.boss.Vo.OrderUserVo;
import com.indexingsystem.boss.Vo.PUserPwVo;
import com.indexingsystem.boss.Vo.ParentUserVo;
import com.indexingsystem.boss.Vo.PuserInfoVo;
import com.indexingsystem.boss.Vo.PusersDetailsVo;
import com.indexingsystem.boss.Vo.PusersOfterDetailVo;
import com.indexingsystem.boss.Vo.PusersSelectVo;
import com.indexingsystem.boss.Vo.StatusList;
import com.indexingsystem.boss.Vo.UserQueryVo;
import com.indexingsystem.boss.Vo.UserRoleVo;
import com.indexingsystem.boss.common.PagedResult;
import com.indexingsystem.boss.entity.Pusers;
import com.indexingsystem.boss.entity.UserInfos;
import com.indexingsystem.boss.entity.UserInstitution;
import com.indexingsystem.boss.entity.UserRole;

public interface IPusersService {

	/**
	 * 根据用户名模糊查询用户信息
	 * 
	 * @param userName
	 * @return
	 */
	List<PusersOfterDetailVo> getUserInfoByAllUserName(String userName, String institutionsId);

	/**
	 * 根据用户名,机构id查询用户信息
	 * 
	 * @param userName
	 * @param institutionsId
	 * @return
	 */
	PusersOfterDetailVo getUserByUserNameInstitution(String userName, String institutionsId);

	/**
	 * 通过用户名称查询用户信息.
	 * 
	 * @param userName
	 * @return
	 */
	PusersDetailsVo getUserInfoByUserName(String userName);

	int deleteByPrimaryKey(String userId) throws Exception;

	int insertSelective(Pusers record, UserInfos userInfos, UserRole userRole, UserInstitution userInstitution) throws Exception;

	/**
	 * 分页查询获取个人用户信息。
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @return
	 */
	PagedResult<Pusers> selectPusersList(String institutionId, Integer pageNo, Integer pageSize);

	List<Pusers> selectPusersCountList(PusersSelectVo record);

	List<Pusers> selectNotBindUser();

	PuserInfoVo selectByPrimaryKey(String userId);

	int updateByPrimaryKeySelective(Pusers record, UserInfos userInfos, UserRole userRole) throws Exception;

	int batchUpdateUserInfoWithList(List<StatusList> list);

	/**
	 * 更新用户信息.
	 * 
	 * @param pusers
	 * @return
	 */
	int updatePuserInfo(Pusers pusers);

	/**
	 * 通过条件查询获取用户符号条件的总数量.
	 * 
	 * @param record
	 * @return
	 */
	Integer getPuserQueryList(PusersSelectVo record);

	/**
	 * 分页条件查询个人用户信息.
	 * 
	 * @param record
	 * @return
	 */
	PagedResult<Pusers> queryListByPage(PusersSelectVo record);

	/**
	 * 启用、禁用操作.
	 * 
	 * @param record
	 * @return
	 */
	int updatePuserInfoByStatus(Pusers record) throws Exception;

	/**
	 * 获取个人用户总数.
	 * 
	 * @return
	 */
	Integer getPusersCount(String institutionId);

	/**
	 * 通过机构id获取机构用户列表.
	 * 
	 * @param institutionId
	 * @return
	 */
	List<Pusers> getInstitutionsPUserListById(String institutionId);

	/**
	 * 角色添加用户时，未添加角色用户关系的用户列表.
	 * 
	 * @param userName
	 * @return
	 */
	PagedResult<UserRoleVo> selectNoAddUserInfoList(UserQueryVo userQueryVo);

	/**
	 * 获取个人用户总数.
	 * 
	 * @return
	 */
	Integer getNoAddUserInfoListCount(UserQueryVo userQueryVo);

	/**
	 * 通过用户id查询用户当前密码.
	 * 
	 * @param userId
	 * @return
	 */
	PUserPwVo getPasswordByUserId(String userId);

	/**
	 * 用户登录.
	 * 
	 * @param userName
	 * @param password
	 * @return
	 */
	Pusers login(String userName);

	/**
	 * 通过用户id校验所属机构是否禁用.
	 * 
	 * @param userId
	 * @return
	 */
	String getUseridByInstitutionsStatus(String userId);

	/**
	 * 批量删除用户信息.
	 * 
	 * @param userIdList
	 * @return
	 */
	int deleteUserInfoByIdBatch(List<String> userIdList) throws Exception;

	/**
	 * 通过机构id查询机构管理员所属用户信息列表.
	 * 
	 * @param institutionsId
	 * @return
	 */
	List<ParentUserVo> getUserListByInstitutionsId(String institutionsId);

	/**
	 * 判断userId是否存在
	 * 
	 * @param userId
	 * @return
	 */
	String getUserId(String userId);

	/**
	 * 通过用户id和机构id查询机构所属用户是否存在.
	 * 
	 * @param orderUserVo
	 * @return
	 */
	Integer getOrderUserInfoCount(OrderUserVo orderUserVo);

	/**
	 * 根据userId查询用户信息
	 * 
	 * @param userId
	 * @return
	 */
	Pusers selectPusersInfoList(String userId);

	/**
	 * 获取已启用用户总数.
	 * 
	 * @return
	 */
	Integer getPuserStatusCount(String institutionId);

	/**
	 * 查询技术专员
	 * 
	 * @return
	 */
	List<ParentUserVo> selectUserBy();

	/**
	 * 根据姓名模糊查询技术专员
	 * 
	 * @param userName
	 * @return
	 */
	List<ParentUserVo> selectUserListByUserName(String userName);

	Object mongoCache(Object object, int type);

	/**
	 * 查询所有用户
	 * 
	 * @return
	 */
	Integer selectUserCount();

	/**
	 * 查询所有子级用户
	 * 
	 * @param institutionId
	 * @return
	 */
	Integer selectCharUserCount(List<String> institutionId);

	Pusers getDhUsersByName(String username);

}